package com.swordget.service;

import com.alibaba.fastjson.JSONArray;
import com.swordget.entity.TableDesign;
import com.swordget.entity.vo.*;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * @Author: David
 * @Date: Created in 14:41 2020/4/15
 * @Description: 公共导入导出服务
 * @Modified By:
 * @Version: 0.0.1
 */
public interface ImportExportService {

    /**
     * 导出excel
     * @param tableDesign 表结构
     * @param queryParam 查询参数
     * @param serials 主键集合
     * @param excelVo 导出的Excel 结构
     * @param loginId 操作用户
     * @param dataStatus
     * @return
     */
    String exportExcel(TableDesign tableDesign, JSONArray queryParam, String[] serials, ExcelVo excelVo, String loginId, String dataStatus);

    /**
     * 导出CSV
     * @param tableDesign 表结构
     * @param queryParam 查询参数
     * @param serials 主键集合
     * @param csvVo 导出的Excel 结构
     * @param loginId 操作用户
     * @param dataStatus
     * @return
     */
    String exportCsv(TableDesign tableDesign, JSONArray queryParam, String[] serials, CsvOrTxtVo csvVo, String loginId, String dataStatus);

    /**
     * 导出txt
     * @param tableDesign 表结构
     * @param queryParam 查询参数
     * @param serials 主键集合
     * @param csvVo 导出的Excel 结构
     * @param loginId 操作用户
     * @param dataStatus
     * @return
     */
    String exportTxt(TableDesign tableDesign, JSONArray queryParam, String[] serials, CsvOrTxtVo csvVo, String loginId, String dataStatus);


    /**
     * 解析excel 文件
     * @param file 要解析的文件
     * @param loginId 操作用户
     * @return
     */
    List<SheetVo> resolveExcel(File file, String loginId);


    /**
     * 解析excel的头
     * @param resovleHeadVo
     * @return
     */
    List<SheetVo> resolveExcelHead(ResovleHeadVo resovleHeadVo) throws IOException;

    /**
     * 解析 txt 文件的头
     * @param resovleHeadVo
     * @return
     */
    CsvOrTxtVo resolveTxtHead(ResovleHeadVo resovleHeadVo) throws IOException;

    void importFile(TableDesign tableDesign, List<CsvOrTxtImportVo> result, String fileId, String handlerType, String loginId, String orgId);

    /**
     * @param template
     * @param tableId
     * @param fileNum
     * @param loginId
     * @param orgId
     */
    void resolveFile(String template, String tableId, String fileNum, String loginId, String orgId, String dataSourceId);
}
